package org.jeecg.modules.oms.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.oms.entity.SemiProductSalesOrderDetail;

import java.math.BigDecimal;
import java.util.List;

/**
 * 半成品销售订单明细Service接口
 */
public interface ISemiProductSalesOrderDetailService extends IService<SemiProductSalesOrderDetail> {

    /**
     * 根据订单ID查询明细列表
     * @param orderId 订单ID
     * @return 明细列表
     */
    List<SemiProductSalesOrderDetail> getByOrderId(String orderId);

    /**
     * 分页查询订单明细
     * @param page 分页参数
     * @param detail 查询条件
     * @return 分页结果
     */
    IPage<SemiProductSalesOrderDetail> queryDetailPage(Page<SemiProductSalesOrderDetail> page, SemiProductSalesOrderDetail detail);

    /**
     * 根据物料ID查询明细列表
     * @param materialId 物料ID
     * @return 明细列表
     */
    List<SemiProductSalesOrderDetail> getByMaterialId(String materialId);

    /**
     * 根据物料编码查询明细列表
     * @param materialCode 物料编码
     * @return 明细列表
     */
    List<SemiProductSalesOrderDetail> getByMaterialCode(String materialCode);

    /**
     * 批量保存订单明细
     * @param orderId 订单ID
     * @param detailList 明细列表
     * @return 保存结果
     */
    boolean saveOrderDetailBatch(String orderId, List<SemiProductSalesOrderDetail> detailList);

    /**
     * 批量更新订单明细
     * @param detailList 明细列表
     * @return 更新结果
     */
    boolean updateOrderDetailBatch(List<SemiProductSalesOrderDetail> detailList);

    /**
     * 根据订单ID删除明细
     * @param orderId 订单ID
     * @return 删除结果
     */
    boolean deleteByOrderId(String orderId);

    /**
     * 计算订单总金额
     * @param orderId 订单ID
     * @return 总金额
     */
    BigDecimal calculateTotalAmount(String orderId);

    /**
     * 计算订单总成本
     * @param orderId 订单ID
     * @return 总成本
     */
    BigDecimal calculateTotalCost(String orderId);

    /**
     * 统计订单明细数量
     * @param orderId 订单ID
     * @return 明细数量
     */
    Integer countByOrderId(String orderId);

    /**
     * 更新明细金额
     * @param id 明细ID
     * @param quantity 数量
     * @param unitPrice 单价
     * @param updateBy 更新人
     * @return 更新结果
     */
    boolean updateDetailAmount(String id, Integer quantity, BigDecimal unitPrice, String updateBy);

    /**
     * 验证明细数据
     * @param detail 明细信息
     * @return 验证结果
     */
    boolean validateDetail(SemiProductSalesOrderDetail detail);

    /**
     * 添加订单明细
     * @param detail 明细信息
     * @return 添加结果
     */
    boolean addOrderDetail(SemiProductSalesOrderDetail detail);

    /**
     * 更新订单明细
     * @param detail 明细信息
     * @return 更新结果
     */
    boolean updateOrderDetail(SemiProductSalesOrderDetail detail);

    /**
     * 删除订单明细
     * @param id 明细ID
     * @return 删除结果
     */
    boolean deleteOrderDetail(String id);
}
